#ifndef __URL_CONVERTER_H__
#define __URL_CONVERTER_H__

// 在发送文件路径时，如果文件路径中只有纯英文字符，浏览器可以正常显示
// 但如果文件路径中出现中文字符或空格，浏览器就无法正常识别了
// 中文字符和空格都被认为是二进制字符，需要转成十六进制字符才能被正常识别

// 中文字符和空格会被浏览器转换为形如"girl%20-%20%E5%89%AF%E6%9C%AC.jpg"的格式
// %后是两个十六进制字符，占一个字节，十六进制字符对应的引文字母均为大写
// 一个中文字符占三个字节，所以一个中文字符对应6位十六进制字符
// 一个空格对应一个字节，通常是%20
// 一个字节对应8位二进制字符，可以转成两位十六进制字符
// 两位十六进制字符占一个字节，转换后，对应的是8位二进制字符
// 例如：%6A -> 01101010，01101010 -> %6A
// 总结：一个中文字符占3个字节，会被浏览器自动转成2*3位十六进制，我们需要把它转成8*3位二进制字符

#include <string>
#include "Defines.h"

// 该类用于实现二进制字符和十六进制字符之间的转换（解决Url路径中出现中文字符或空格时，浏览器无法正常显示文件的问题）
class UrlConverter {
public:
    /*单字节字符互转*/
    // 一位十六进制字符转八位二进制字符
    static unsigned char _hexCharToInt8(char c);    // 静态方法可直接通过类名调用

    // 八位二进制字符转两位十六进制字符（所以返回值类型不能再使用char）
    static std::string _int8ToHexChar(unsigned char c);

public:
    /*字符串互转*/
    // 从Url转为中文字符串（十六进制字符转为我们能看懂的中文二进制字符）
    static std::string _convertFromUrl(std::string url);
    // 从中文转为Url字符串（二进制字符转为浏览器能识别的十六进制字符）
    static std::string _convertToUrl(std::string str);
};

#endif // !__URL_CONVERTER_H__